package jdbc.day01;


/*
* 在jdbc中设置事务的隔离级别
* */

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class TransactionDemoOne {
    public static void main(String[] args) {
        try {
            //连接池
            DruidDataSource ds = new DruidDataSource();
            ds.setUrl("jdbc:mysql://localhost:3306/test");//阿里提供的连接池可以不设置，但是不设置会报错
            ds.setUsername("root");
            ds.setPassword("root");
            ds.setInitialSize(5);//初始化连接池中的连接个数
            ds.setMaxActive(10);//最大连接数 （默认为8） 当初始连接数小于最大连接数，那么当连接池中的连接用完之后，会自动创建新的连接最多为10个

            Connection connection = ds.getConnection();

            /*
            //注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取连接对象
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "root";
            Connection connection = DriverManager.getConnection(url, user, password);
            */


            //设置事务的隔离级别
            //隔离级别在Connection中对应的常用可以进行设置
            connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
            //设置事务的提交方式
            connection.setAutoCommit(false);//将自动提交关闭
            System.out.println("开始事务");
            String sql = "insert into tb_user values (?,?,?,?,?,?,?)";
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setInt(1, 14);
            ps.setString(2, "88");
            ps.setInt(3, 18);
            ps.setString(4, "男");
            ps.setString(5, "123456");
            ps.setString(6, "江西省");
            ps.setString(7, "2");
            int num = ps.executeUpdate();


            System.out.println(num>0?"添加成功":"添加失败");
            System.out.println("事务提交");
            connection.commit();
            // System.out.println("事务回滚");
//            connection.rollback(); //可以不用回滚，前面报错就直接抛出去了
            connection.close();
            System.out.println("ok");
        }catch (Exception e){
            //connection 这个在这个地方会有异常，因为在反编译里这个catch在最外面并不认识connection
            e.printStackTrace();
        }
    }
}
